#include "lib/common.h"

int main(int argc, char **argv) 
{
    if (argc != 2) 
    {
        error(1, 0, "usage: tcpclient <IPaddress>");
    }
    // 常规的创建套接字和地址，建立连接的过程
    int socket_fd;
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERV_PORT);
    inet_pton(AF_INET, argv[1], &server_addr.sin_addr);

    socklen_t server_len = sizeof(server_addr);
    int connect_rt = connect(socket_fd, (struct sockaddr *) &server_addr, server_len);
    if (connect_rt < 0) 
    {
        error(1, errno, "connect failed ");
    }

    // 报文格式转化为结构体
    struct 
    {
        u_int32_t message_length;
        u_int32_t message_type;
        char data[128];
    } message;


    int n;

    // 从标准输入读入数据，分别对消息长度、类型进行了初始化，注意这里使用了 htonl 函数将字节大小转化为了网络字节顺序
    while (fgets(message.data, sizeof(message.data), stdin) != NULL) 
    {
        n = strlen(message.data);
        message.message_length = htonl(n);
        message.message_type = 1;
        // 实际发送的字节流大小为消息长度 4 字节，加上消息类型 4 字节，以及标准输入的字符串大小
        if (send(socket_fd, (char *) &message, sizeof(message.message_length) + sizeof(message.message_type) + n, 0) <
            0)
            error(1, errno, "send failure");

    }
    exit(0);
}

